package com.nettytime.util.testjiebaonianbao;
import com.alibaba.fastjson.JSON;
import com.nettytime.entity.UserSocket;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageDecoder;
import io.netty.util.CharsetUtil;
import java.util.List;

/**
 * MessageToByteEncoder和ByteToMessageDecoder来实现。
 * MessageToByteEncoder的作用是将响应数据编码为一个ByteBuf对象，
 * ByteToMessageDecoder则是将接收到的ByteBuf数据转换为某个对象数据。
 * 通过实现这两个抽象类
 */
public class JsonDecoder extends MessageToMessageDecoder<ByteBuf> {
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf buf, List<Object> out)throws Exception {
        byte[] bytes = new byte[buf.readableBytes()];
        buf.readBytes(bytes);
        UserSocket user = JSON.parseObject(new String(bytes, CharsetUtil.UTF_8), UserSocket.class);
        if(null != user) {
            out.add(user);
        }
    }
}
